[
  {
    "description": "Swagger api schema does not compile (#70)",
    "schema": {
      "title": "A JSON Schema for Swagger 2.0 API.",
      "$id": "http://swagger.io/v2/schema.json#",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "type": "object",
      "required": [
        "swagger",
        "info",
        "paths"
      ],
      "additionalProperties": false,
      "patternProperties": {
        "^x-": {
          "$ref": "#/definitions/vendorExtension"
        }
      },
      "properties": {
        "swagger": {
          "type": "string",
          "enum": [
            "2.0"
          ],
          "description": "The Swagger version of this document."
        },
        "info": {
          "$ref": "#/definitions/info"
        },
        "host": {
          "type": "string",
          "pattern": "^[^{}/ :\\\\]+(?::\\d+)?$",
          "description": "The host (name or ip) of the API. Example: 'swagger.io'"
        },
        "basePath": {
          "type": "string",
          "pattern": "^/",
          "description": "The base path to the API. Example: '/api'."
        },
        "schemes": {
          "$ref": "#/definitions/schemesList"
        },
        "consumes": {
          "description": "A list of MIME types accepted by the API.",
          "$ref": "#/definitions/mediaTypeList"
        },
        "produces": {
          "description": "A list of MIME types the API can produce.",
          "$ref": "#/definitions/mediaTypeList"
        },
        "paths": {
          "$ref": "#/definitions/paths"
        },
        "definitions": {
          "$ref": "#/definitions/definitions"
        },
        "parameters": {
          "$ref": "#/definitions/parameterDefinitions"
        },
        "responses": {
          "$ref": "#/definitions/responseDefinitions"
        },
        "security": {
          "$ref": "#/definitions/security"
        },
        "securityDefinitions": {
          "$ref": "#/definitions/securityDefinitions"
        },
        "tags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/tag"
          },
          "uniqueItems": true
        },
        "externalDocs": {
          "$ref": "#/definitions/externalDocs"
        }
      },
      "definitions": {
        "info": {
          "type": "object",
          "description": "General information about the API.",
          "required": [
            "version",
            "title"
          ],
          "additionalProperties": false,
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          },
          "properties": {
            "title": {
              "type": "string",
              "description": "A unique and precise title of the API."
            },
            "version": {
              "type": "string",
              "description": "A semantic version number of the API."
            },
            "description": {
              "type": "string",
              "description": "A longer description of the API. Should be different from the title.  GitHub Flavored Markdown is allowed."
            },
            "termsOfService": {
              "type": "string",
              "description": "The terms of service for the API."
            },
            "contact": {
              "$ref": "#/definitions/contact"
            },
            "license": {
              "$ref": "#/definitions/license"
            }
          }
        },
        "contact": {
          "type": "object",
          "description": "Contact information for the owners of the API.",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "description": "The identifying name of the contact person/organization."
            },
            "url": {
              "type": "string",
              "description": "The URL pointing to the contact information.",
              "format": "uri"
            },
            "email": {
              "type": "string",
              "description": "The email address of the contact person/organization.",
              "format": "email"
            }
          },
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          }
        },
        "license": {
          "type": "object",
          "required": [
            "name"
          ],
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "description": "The name of the license type. It's encouraged to use an OSI compatible license."
            },
            "url": {
              "type": "string",
              "description": "The URL pointing to the license.",
              "format": "uri"
            }
          },
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          }
        },
        "paths": {
          "type": "object",
          "description": "Relative paths to the individual endpoints. They must be relative to the 'basePath'.",
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            },
            "^/": {
              "$ref": "#/definitions/pathItem"
            }
          },
          "additionalProperties": false
        },
        "definitions": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/schema"
          },
          "description": "One or more JSON objects describing the schemas being consumed and produced by the API."
        },
        "parameterDefinitions": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/parameter"
          },
          "description": "One or more JSON representations for parameters"
        },
        "responseDefinitions": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/response"
          },
          "description": "One or more JSON representations for parameters"
        },
        "externalDocs": {
          "type": "object",
          "additionalProperties": false,
          "description": "information about external documentation",
          "required": [
            "url"
          ],
          "properties": {
            "description": {
              "type": "string"
            },
            "url": {
              "type": "string",
              "format": "uri"
            }
          },
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          }
        },
        "examples": {
          "type": "object",
          "additionalProperties": true
        },
        "mimeType": {
          "type": "string",
          "description": "The MIME type of the HTTP message."
        },
        "operation": {
          "type": "object",
          "required": [
            "responses"
          ],
          "additionalProperties": false,
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          },
          "properties": {
            "tags": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "uniqueItems": true
            },
            "summary": {
              "type": "string",
              "description": "A brief summary of the operation."
            },
            "description": {
              "type": "string",
              "description": "A longer description of the operation, GitHub Flavored Markdown is allowed."
            },
            "externalDocs": {
              "$ref": "#/definitions/externalDocs"
            },
            "operationId": {
              "type": "string",
              "description": "A unique identifier of the operation."
            },
            "produces": {
              "description": "A list of MIME types the API can produce.",
              "$ref": "#/definitions/mediaTypeList"
            },
            "consumes": {
              "description": "A list of MIME types the API can consume.",
              "$ref": "#/definitions/mediaTypeList"
            },
            "parameters": {
              "$ref": "#/definitions/parametersList"
            },
            "responses": {
              "$ref": "#/definitions/responses"
            },
            "schemes": {
              "$ref": "#/definitions/schemesList"
            },
            "deprecated": {
              "type": "boolean",
              "default": false
            },
            "security": {
              "$ref": "#/definitions/security"
            }
          }
        },
        "pathItem": {
          "type": "object",
          "additionalProperties": false,
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          },
          "properties": {
            "$ref": {
              "type": "string"
            },
            "get": {
              "$ref": "#/definitions/operation"
            },
            "put": {
              "$ref": "#/definitions/operation"
            },
            "post": {
              "$ref": "#/definitions/operation"
            },
            "delete": {
              "$ref": "#/definitions/operation"
            },
            "options": {
              "$ref": "#/definitions/operation"
            },
            "head": {
              "$ref": "#/definitions/operation"
            },
            "patch": {
              "$ref": "#/definitions/operation"
            },
            "parameters": {
              "$ref": "#/definitions/parametersList"
            }
          }
        },
        "responses": {
          "type": "object",
          "description": "Response objects names can either be any valid HTTP status code or 'default'.",
          "minProperties": 1,
          "additionalProperties": false,
          "patternProperties": {
            "^([0-9]{3})$|^(default)$": {
              "$ref": "#/definitions/responseValue"
            },
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          },
          "not": {
            "type": "object",
            "additionalProperties": false,
            "patternProperties": {
              "^x-": {
                "$ref": "#/definitions/vendorExtension"
              }
            }
          }
        },
        "responseValue": {
          "oneOf": [
            {
              "$ref": "#/definitions/response"
            },
            {
              "$ref": "#/definitions/jsonReference"
            }
          ]
        },
        "response": {
          "type": "object",
          "required": [
            "description"
          ],
          "properties": {
            "description": {
              "type": "string"
            },
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/definitions/schema"
                },
                {
                  "$ref": "#/definitions/fileSchema"
                }
              ]
            },
            "headers": {
              "$ref": "#/definitions/headers"
            },
            "examples": {
              "$ref": "#/definitions/examples"
            }
          },
          "additionalProperties": false,
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          }
        },
        "headers": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/header"
          }
        },
        "header": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "type"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "string",
                "number",
                "integer",
                "boolean",
                "array"
              ]
            },
            "format": {
              "type": "string"
            },
            "items": {
              "$ref": "#/definitions/primitivesItems"
            },
            "collectionFormat": {
              "$ref": "#/definitions/collectionFormat"
            },
            "default": {
              "$ref": "#/definitions/default"
            },
            "maximum": {
              "$ref": "#/definitions/maximum"
            },
            "exclusiveMaximum": {
              "$ref": "#/definitions/exclusiveMaximum"
            },
            "minimum": {
              "$ref": "#/definitions/minimum"
            },
            "exclusiveMinimum": {
              "$ref": "#/definitions/exclusiveMinimum"
            },
            "maxLength": {
              "$ref": "#/definitions/maxLength"
            },
            "minLength": {
              "$ref": "#/definitions/minLength"
            },
            "pattern": {
              "$ref": "#/definitions/pattern"
            },
            "maxItems": {
              "$ref": "#/definitions/maxItems"
            },
            "minItems": {
              "$ref": "#/definitions/minItems"
            },
            "uniqueItems": {
              "$ref": "#/definitions/uniqueItems"
            },
            "enum": {
              "$ref": "#/definitions/enum"
            },
            "multipleOf": {
              "$ref": "#/definitions/multipleOf"
            },
            "description": {
              "type": "string"
            }
          },
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          }
        },
        "vendorExtension": {
          "description": "Any property starting with x- is valid.",
          "additionalProperties": true,
          "additionalItems": true
        },
        "bodyParameter": {
          "type": "object",
          "required": [
            "name",
            "in",
            "schema"
          ],
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          },
          "properties": {
            "description": {
              "type": "string",
              "description": "A brief description of the parameter. This could contain examples of use.  GitHub Flavored Markdown is allowed."
            },
            "name": {
              "type": "string",
              "description": "The name of the parameter."
            },
            "in": {
              "type": "string",
              "description": "Determines the location of the parameter.",
              "enum": [
                "body"
              ]
            },
            "required": {
              "type": "boolean",
              "description": "Determines whether or not this parameter is required or optional.",
              "default": false
            },
            "schema": {
              "$ref": "#/definitions/schema"
            }
          },
          "additionalProperties": false
        },
        "headerParameterSubSchema": {
          "additionalProperties": false,
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          },
          "properties": {
            "required": {
              "type": "boolean",
              "description": "Determines whether or not this parameter is required or optional.",
              "default": false
            },
            "in": {
              "type": "string",
              "description": "Determines the location of the parameter.",
              "enum": [
                "header"
              ]
            },
            "description": {
              "type": "string",
              "description": "A brief description of the parameter. This could contain examples of use.  GitHub Flavored Markdown is allowed."
            },
            "name": {
              "type": "string",
              "description": "The name of the parameter."
            },
            "type": {
              "type": "string",
              "enum": [
                "string",
                "number",
                "boolean",
                "integer",
                "array"
              ]
            },
            "format": {
              "type": "string"
            },
            "items": {
              "$ref": "#/definitions/primitivesItems"
            },
            "collectionFormat": {
              "$ref": "#/definitions/collectionFormat"
            },
            "default": {
              "$ref": "#/definitions/default"
            },
            "maximum": {
              "$ref": "#/definitions/maximum"
            },
            "exclusiveMaximum": {
              "$ref": "#/definitions/exclusiveMaximum"
            },
            "minimum": {
              "$ref": "#/definitions/minimum"
            },
            "exclusiveMinimum": {
              "$ref": "#/definitions/exclusiveMinimum"
            },
            "maxLength": {
              "$ref": "#/definitions/maxLength"
            },
            "minLength": {
              "$ref": "#/definitions/minLength"
            },
            "pattern": {
              "$ref": "#/definitions/pattern"
            },
            "maxItems": {
              "$ref": "#/definitions/maxItems"
            },
            "minItems": {
              "$ref": "#/definitions/minItems"
            },
            "uniqueItems": {
              "$ref": "#/definitions/uniqueItems"
            },
            "enum": {
              "$ref": "#/definitions/enum"
            },
            "multipleOf": {
              "$ref": "#/definitions/multipleOf"
            }
          }
        },
        "queryParameterSubSchema": {
          "additionalProperties": false,
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          },
          "properties": {
            "required": {
              "type": "boolean",
              "description": "Determines whether or not this parameter is required or optional.",
              "default": false
            },
            "in": {
              "type": "string",
              "description": "Determines the location of the parameter.",
              "enum": [
                "query"
              ]
            },
            "description": {
              "type": "string",
              "description": "A brief description of the parameter. This could contain examples of use.  GitHub Flavored Markdown is allowed."
            },
            "name": {
              "type": "string",
              "description": "The name of the parameter."
            },
            "allowEmptyValue": {
              "type": "boolean",
              "default": false,
              "description": "allows sending a parameter by name only or with an empty value."
            },
            "type": {
              "type": "string",
              "enum": [
                "string",
                "number",
                "boolean",
                "integer",
                "array"
              ]
            },
            "format": {
              "type": "string"
            },
            "items": {
              "$ref": "#/definitions/primitivesItems"
            },
            "collectionFormat": {
              "$ref": "#/definitions/collectionFormatWithMulti"
            },
            "default": {
              "$ref": "#/definitions/default"
            },
            "maximum": {
              "$ref": "#/definitions/maximum"
            },
            "exclusiveMaximum": {
              "$ref": "#/definitions/exclusiveMaximum"
            },
            "minimum": {
              "$ref": "#/definitions/minimum"
            },
            "exclusiveMinimum": {
              "$ref": "#/definitions/exclusiveMinimum"
            },
            "maxLength": {
              "$ref": "#/definitions/maxLength"
            },
            "minLength": {
              "$ref": "#/definitions/minLength"
            },
            "pattern": {
              "$ref": "#/definitions/pattern"
            },
            "maxItems": {
              "$ref": "#/definitions/maxItems"
            },
            "minItems": {
              "$ref": "#/definitions/minItems"
            },
            "uniqueItems": {
              "$ref": "#/definitions/uniqueItems"
            },
            "enum": {
              "$ref": "#/definitions/enum"
            },
            "multipleOf": {
              "$ref": "#/definitions/multipleOf"
            }
          }
        },
        "formDataParameterSubSchema": {
          "additionalProperties": false,
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          },
          "properties": {
            "required": {
              "type": "boolean",
              "description": "Determines whether or not this parameter is required or optional.",
              "default": false
            },
            "in": {
              "type": "string",
              "description": "Determines the location of the parameter.",
              "enum": [
                "formData"
              ]
            },
            "description": {
              "type": "string",
              "description": "A brief description of the parameter. This could contain examples of use.  GitHub Flavored Markdown is allowed."
            },
            "name": {
              "type": "string",
              "description": "The name of the parameter."
            },
            "allowEmptyValue": {
              "type": "boolean",
              "default": false,
              "description": "allows sending a parameter by name only or with an empty value."
            },
            "type": {
              "type": "string",
              "enum": [
                "string",
                "number",
                "boolean",
                "integer",
                "array",
                "file"
              ]
            },
            "format": {
              "type": "string"
            },
            "items": {
              "$ref": "#/definitions/primitivesItems"
            },
            "collectionFormat": {
              "$ref": "#/definitions/collectionFormatWithMulti"
            },
            "default": {
              "$ref": "#/definitions/default"
            },
            "maximum": {
              "$ref": "#/definitions/maximum"
            },
            "exclusiveMaximum": {
              "$ref": "#/definitions/exclusiveMaximum"
            },
            "minimum": {
              "$ref": "#/definitions/minimum"
            },
            "exclusiveMinimum": {
              "$ref": "#/definitions/exclusiveMinimum"
            },
            "maxLength": {
              "$ref": "#/definitions/maxLength"
            },
            "minLength": {
              "$ref": "#/definitions/minLength"
            },
            "pattern": {
              "$ref": "#/definitions/pattern"
            },
            "maxItems": {
              "$ref": "#/definitions/maxItems"
            },
            "minItems": {
              "$ref": "#/definitions/minItems"
            },
            "uniqueItems": {
              "$ref": "#/definitions/uniqueItems"
            },
            "enum": {
              "$ref": "#/definitions/enum"
            },
            "multipleOf": {
              "$ref": "#/definitions/multipleOf"
            }
          }
        },
        "pathParameterSubSchema": {
          "additionalProperties": false,
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          },
          "required": [
            "required"
          ],
          "properties": {
            "required": {
              "type": "boolean",
              "enum": [
                true
              ],
              "description": "Determines whether or not this parameter is required or optional."
            },
            "in": {
              "type": "string",
              "description": "Determines the location of the parameter.",
              "enum": [
                "path"
              ]
            },
            "description": {
              "type": "string",
              "description": "A brief description of the parameter. This could contain examples of use.  GitHub Flavored Markdown is allowed."
            },
            "name": {
              "type": "string",
              "description": "The name of the parameter."
            },
            "type": {
              "type": "string",
              "enum": [
                "string",
                "number",
                "boolean",
                "integer",
                "array"
              ]
            },
            "format": {
              "type": "string"
            },
            "items": {
              "$ref": "#/definitions/primitivesItems"
            },
            "collectionFormat": {
              "$ref": "#/definitions/collectionFormat"
            },
            "default": {
              "$ref": "#/definitions/default"
            },
            "maximum": {
              "$ref": "#/definitions/maximum"
            },
            "exclusiveMaximum": {
              "$ref": "#/definitions/exclusiveMaximum"
            },
            "minimum": {
              "$ref": "#/definitions/minimum"
            },
            "exclusiveMinimum": {
              "$ref": "#/definitions/exclusiveMinimum"
            },
            "maxLength": {
              "$ref": "#/definitions/maxLength"
            },
            "minLength": {
              "$ref": "#/definitions/minLength"
            },
            "pattern": {
              "$ref": "#/definitions/pattern"
            },
            "maxItems": {
              "$ref": "#/definitions/maxItems"
            },
            "minItems": {
              "$ref": "#/definitions/minItems"
            },
            "uniqueItems": {
              "$ref": "#/definitions/uniqueItems"
            },
            "enum": {
              "$ref": "#/definitions/enum"
            },
            "multipleOf": {
              "$ref": "#/definitions/multipleOf"
            }
          }
        },
        "nonBodyParameter": {
          "type": "object",
          "required": [
            "name",
            "in",
            "type"
          ],
          "oneOf": [
            {
              "$ref": "#/definitions/headerParameterSubSchema"
            },
            {
              "$ref": "#/definitions/formDataParameterSubSchema"
            },
            {
              "$ref": "#/definitions/queryParameterSubSchema"
            },
            {
              "$ref": "#/definitions/pathParameterSubSchema"
            }
          ]
        },
        "parameter": {
          "oneOf": [
            {
              "$ref": "#/definitions/bodyParameter"
            },
            {
              "$ref": "#/definitions/nonBodyParameter"
            }
          ]
        },
        "schema": {
          "type": "object",
          "description": "A deterministic version of a JSON Schema object.",
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          },
          "properties": {
            "$ref": {
              "type": "string"
            },
            "format": {
              "type": "string"
            },
            "title": {
              "$ref": "http://json-schema.org/draft-07/schema#/properties/title"
            },
            "description": {
              "$ref": "http://json-schema.org/draft-07/schema#/properties/description"
            },
            "default": {
              "$ref": "http://json-schema.org/draft-07/schema#/properties/default"
            },
            "multipleOf": {
              "$ref": "http://json-schema.org/draft-07/schema#/properties/multipleOf"
            },
            "maximum": {
              "$ref": "http://json-schema.org/draft-07/schema#/properties/maximum"
            },
            "exclusiveMaximum": {
              "$ref": "http://json-schema.org/draft-07/schema#/properties/exclusiveMaximum"
            },
            "minimum": {
              "$ref": "http://json-schema.org/draft-07/schema#/properties/minimum"
            },
            "exclusiveMinimum": {
              "$ref": "http://json-schema.org/draft-07/schema#/properties/exclusiveMinimum"
            },
            "maxLength": {
              "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeInteger"
            },
            "minLength": {
              "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeIntegerDefault0"
            },
            "pattern": {
              "$ref": "http://json-schema.org/draft-07/schema#/properties/pattern"
            },
            "maxItems": {
              "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeInteger"
            },
            "minItems": {
              "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeIntegerDefault0"
            },
            "uniqueItems": {
              "$ref": "http://json-schema.org/draft-07/schema#/properties/uniqueItems"
            },
            "maxProperties": {
              "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeInteger"
            },
            "minProperties": {
              "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeIntegerDefault0"
            },
            "required": {
              "$ref": "http://json-schema.org/draft-07/schema#/definitions/stringArray"
            },
            "enum": {
              "$ref": "http://json-schema.org/draft-07/schema#/properties/enum"
            },
            "additionalProperties": {
              "anyOf": [
                {
                  "$ref": "#/definitions/schema"
                },
                {
                  "type": "boolean"
                }
              ],
              "default": {}
            },
            "type": {
              "$ref": "http://json-schema.org/draft-07/schema#/properties/type"
            },
            "items": {
              "anyOf": [
                {
                  "$ref": "#/definitions/schema"
                },
                {
                  "type": "array",
                  "minItems": 1,
                  "items": {
                    "$ref": "#/definitions/schema"
                  }
                }
              ],
              "default": {}
            },
            "allOf": {
              "type": "array",
              "minItems": 1,
              "items": {
                "$ref": "#/definitions/schema"
              }
            },
            "properties": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/schema"
              },
              "default": {}
            },
            "discriminator": {
              "type": "string"
            },
            "readOnly": {
              "type": "boolean",
              "default": false
            },
            "xml": {
              "$ref": "#/definitions/xml"
            },
            "externalDocs": {
              "$ref": "#/definitions/externalDocs"
            },
            "example": {}
          },
          "additionalProperties": false
        },
        "fileSchema": {
          "type": "object",
          "description": "A deterministic version of a JSON Schema object.",
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          },
          "required": [
            "type"
          ],
          "properties": {
            "format": {
              "type": "string"
            },
            "title": {
              "$ref": "http://json-schema.org/draft-07/schema#/properties/title"
            },
            "description": {
              "$ref": "http://json-schema.org/draft-07/schema#/properties/description"
            },
            "default": {
              "$ref": "http://json-schema.org/draft-07/schema#/properties/default"
            },
            "required": {
              "$ref": "http://json-schema.org/draft-07/schema#/definitions/stringArray"
            },
            "type": {
              "type": "string",
              "enum": [
                "file"
              ]
            },
            "readOnly": {
              "type": "boolean",
              "default": false
            },
            "externalDocs": {
              "$ref": "#/definitions/externalDocs"
            },
            "example": {}
          },
          "additionalProperties": false
        },
        "primitivesItems": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "string",
                "number",
                "integer",
                "boolean",
                "array"
              ]
            },
            "format": {
              "type": "string"
            },
            "items": {
              "$ref": "#/definitions/primitivesItems"
            },
            "collectionFormat": {
              "$ref": "#/definitions/collectionFormat"
            },
            "default": {
              "$ref": "#/definitions/default"
            },
            "maximum": {
              "$ref": "#/definitions/maximum"
            },
            "exclusiveMaximum": {
              "$ref": "#/definitions/exclusiveMaximum"
            },
            "minimum": {
              "$ref": "#/definitions/minimum"
            },
            "exclusiveMinimum": {
              "$ref": "#/definitions/exclusiveMinimum"
            },
            "maxLength": {
              "$ref": "#/definitions/maxLength"
            },
            "minLength": {
              "$ref": "#/definitions/minLength"
            },
            "pattern": {
              "$ref": "#/definitions/pattern"
            },
            "maxItems": {
              "$ref": "#/definitions/maxItems"
            },
            "minItems": {
              "$ref": "#/definitions/minItems"
            },
            "uniqueItems": {
              "$ref": "#/definitions/uniqueItems"
            },
            "enum": {
              "$ref": "#/definitions/enum"
            },
            "multipleOf": {
              "$ref": "#/definitions/multipleOf"
            }
          },
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          }
        },
        "security": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/securityRequirement"
          },
          "uniqueItems": true
        },
        "securityRequirement": {
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "uniqueItems": true
          }
        },
        "xml": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string"
            },
            "namespace": {
              "type": "string"
            },
            "prefix": {
              "type": "string"
            },
            "attribute": {
              "type": "boolean",
              "default": false
            },
            "wrapped": {
              "type": "boolean",
              "default": false
            }
          },
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          }
        },
        "tag": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "name"
          ],
          "properties": {
            "name": {
              "type": "string"
            },
            "description": {
              "type": "string"
            },
            "externalDocs": {
              "$ref": "#/definitions/externalDocs"
            }
          },
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          }
        },
        "securityDefinitions": {
          "type": "object",
          "additionalProperties": {
            "oneOf": [
              {
                "$ref": "#/definitions/basicAuthenticationSecurity"
              },
              {
                "$ref": "#/definitions/apiKeySecurity"
              },
              {
                "$ref": "#/definitions/oauth2ImplicitSecurity"
              },
              {
                "$ref": "#/definitions/oauth2PasswordSecurity"
              },
              {
                "$ref": "#/definitions/oauth2ApplicationSecurity"
              },
              {
                "$ref": "#/definitions/oauth2AccessCodeSecurity"
              }
            ]
          }
        },
        "basicAuthenticationSecurity": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "type"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "basic"
              ]
            },
            "description": {
              "type": "string"
            }
          },
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          }
        },
        "apiKeySecurity": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "type",
            "name",
            "in"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "apiKey"
              ]
            },
            "name": {
              "type": "string"
            },
            "in": {
              "type": "string",
              "enum": [
                "header",
                "query"
              ]
            },
            "description": {
              "type": "string"
            }
          },
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          }
        },
        "oauth2ImplicitSecurity": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "type",
            "flow",
            "authorizationUrl"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "oauth2"
              ]
            },
            "flow": {
              "type": "string",
              "enum": [
                "implicit"
              ]
            },
            "scopes": {
              "$ref": "#/definitions/oauth2Scopes"
            },
            "authorizationUrl": {
              "type": "string",
              "format": "uri"
            },
            "description": {
              "type": "string"
            }
          },
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          }
        },
        "oauth2PasswordSecurity": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "type",
            "flow",
            "tokenUrl"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "oauth2"
              ]
            },
            "flow": {
              "type": "string",
              "enum": [
                "password"
              ]
            },
            "scopes": {
              "$ref": "#/definitions/oauth2Scopes"
            },
            "tokenUrl": {
              "type": "string",
              "format": "uri"
            },
            "description": {
              "type": "string"
            }
          },
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          }
        },
        "oauth2ApplicationSecurity": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "type",
            "flow",
            "tokenUrl"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "oauth2"
              ]
            },
            "flow": {
              "type": "string",
              "enum": [
                "application"
              ]
            },
            "scopes": {
              "$ref": "#/definitions/oauth2Scopes"
            },
            "tokenUrl": {
              "type": "string",
              "format": "uri"
            },
            "description": {
              "type": "string"
            }
          },
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          }
        },
        "oauth2AccessCodeSecurity": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "type",
            "flow",
            "authorizationUrl",
            "tokenUrl"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "oauth2"
              ]
            },
            "flow": {
              "type": "string",
              "enum": [
                "accessCode"
              ]
            },
            "scopes": {
              "$ref": "#/definitions/oauth2Scopes"
            },
            "authorizationUrl": {
              "type": "string",
              "format": "uri"
            },
            "tokenUrl": {
              "type": "string",
              "format": "uri"
            },
            "description": {
              "type": "string"
            }
          },
          "patternProperties": {
            "^x-": {
              "$ref": "#/definitions/vendorExtension"
            }
          }
        },
        "oauth2Scopes": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "mediaTypeList": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/mimeType"
          },
          "uniqueItems": true
        },
        "parametersList": {
          "type": "array",
          "description": "The parameters needed to send a valid API call.",
          "additionalItems": false,
          "items": {
            "oneOf": [
              {
                "$ref": "#/definitions/parameter"
              },
              {
                "$ref": "#/definitions/jsonReference"
              }
            ]
          },
          "uniqueItems": true
        },
        "schemesList": {
          "type": "array",
          "description": "The transfer protocol of the API.",
          "items": {
            "type": "string",
            "enum": [
              "http",
              "https",
              "ws",
              "wss"
            ]
          },
          "uniqueItems": true
        },
        "collectionFormat": {
          "type": "string",
          "enum": [
            "csv",
            "ssv",
            "tsv",
            "pipes"
          ],
          "default": "csv"
        },
        "collectionFormatWithMulti": {
          "type": "string",
          "enum": [
            "csv",
            "ssv",
            "tsv",
            "pipes",
            "multi"
          ],
          "default": "csv"
        },
        "title": {
          "$ref": "http://json-schema.org/draft-07/schema#/properties/title"
        },
        "description": {
          "$ref": "http://json-schema.org/draft-07/schema#/properties/description"
        },
        "default": {
          "$ref": "http://json-schema.org/draft-07/schema#/properties/default"
        },
        "multipleOf": {
          "$ref": "http://json-schema.org/draft-07/schema#/properties/multipleOf"
        },
        "maximum": {
          "$ref": "http://json-schema.org/draft-07/schema#/properties/maximum"
        },
        "exclusiveMaximum": {
          "$ref": "http://json-schema.org/draft-07/schema#/properties/exclusiveMaximum"
        },
        "minimum": {
          "$ref": "http://json-schema.org/draft-07/schema#/properties/minimum"
        },
        "exclusiveMinimum": {
          "$ref": "http://json-schema.org/draft-07/schema#/properties/exclusiveMinimum"
        },
        "maxLength": {
          "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeInteger"
        },
        "minLength": {
          "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeIntegerDefault0"
        },
        "pattern": {
          "$ref": "http://json-schema.org/draft-07/schema#/properties/pattern"
        },
        "maxItems": {
          "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeInteger"
        },
        "minItems": {
          "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeIntegerDefault0"
        },
        "uniqueItems": {
          "$ref": "http://json-schema.org/draft-07/schema#/properties/uniqueItems"
        },
        "enum": {
          "$ref": "http://json-schema.org/draft-07/schema#/properties/enum"
        },
        "jsonReference": {
          "type": "object",
          "required": [
            "$ref"
          ],
          "additionalProperties": false,
          "properties": {
            "$ref": {
              "type": "string"
            }
          }
        }
      }
    },
    "tests": [
      {
        "description": "empty object is invalid",
        "data": {},
        "valid": false
      },
      {
        "description": "minimal valid object",
        "data": {
          "swagger": "2.0",
          "info": {
            "title": "sample api definition",
            "version": "0.1"
          },
          "paths": {}
        },
        "valid": true
      }
    ]
  }
]
